#绘制柱状图
import matplotlib.pyplot as plt
import numpy as np

#1.准备数据
#班级
classes=['A','B','C','D','E']
#人数A
countsA=[30,25,40,35,20]
#人数B
countsB=[20,25,30,35,40]
#类别位置
x=np.arange(len(classes))
#类别宽度
width=0.35
#2.创建画布
plt.figure(figsize=(10,6),dpi=120)
#3.绘制柱状图
rect1=plt.bar(
    x-width/2,
    countsA,
    width,
    color='orange',
    alpha=0.7,
    edgecolor='black',
    linewidth=0.5
)
rect2=plt.bar(
    x+width/2,
    countsB,
    width,
    color='lightblue',
    alpha=0.7,
    edgecolor='black',
    linewidth=0.5
)
#添加数据标签
def add_labels(rects):
    for rect in rects:
        height=rect.get_height()
        plt.text(
            rect.get_x()+rect.get_width()/2,
            height,
            str(height),
            ha='center',
            va='bottom',
            fontsize=10
        )
add_labels(rect1)
add_labels(rect2)
#设置图表标题和标签
plt.title('班级人成绩等级数分布柱状图',fontsize=16,fontweight='bold',pad=20)
plt.xlabel('成绩等级',fontsize=12)
plt.ylabel('人数',fontsize=12)
#设置x轴刻度标签
plt.xticks(x,classes,fontsize=12)
#设置y轴刻度标签
plt.yticks(fontsize=12)
#设置图表图例
plt.legend(
    (rect1,rect2),
    ('班级A','班级B'),
    fontsize=12,
    loc='upper left'
)
#设置图表网格
plt.grid(axis='y',linestyle=':',alpha=0.7)
# 4.避免乱码
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
# 5.显示图表
plt.tight_layout()
plt.show()
#